package com.foreknow.controller;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 1.什么是会话:它是指客户端与服务器端之间的数据传输(登录，购物车)
 * 2.会话管理：管理数据
 * 常用的会话技术：
 * 1.Cookie 数据会保存在客户端
 * 2.Session 数据会保存在服务器端
 *
 * 什么是Cookie:它是客户端的技术，程序会把每个用户的数据以cookie的形式写给各自的游览器，当用户使用
 * 游览器再去访问Web服务器的资源的时候，它会有自自的数据
 *
 * Cookie类：主要用于存储会话的数据
 * 1. 构造Cookie对象
 *
 * 2. 设置Cookie 例如：可以设置Cookie的有效时间  setMaxAge(int expiry) 以秒为单位 1*24*60*60(一天)
 *
 * 3. 发送客户端游览器来保存  HttpServletResponse:addCookie(Cookie cookie)
 *
 * 4. 客户端再向服务器端发送请求的时候，服务器端也可以接收cookie    Cookie[]	request.getCookies()
 *
 * Cookie的原理：
 * 1.要在服务器端创建一个Cookie对象，将数据保存到会话中
 * 2.服务器会发送Cookie的信息给游览器，之后会将Cookie保存到游览器端
 * 3.游览器会在下次访问服务的时候，会携带cookie的信息(这些信息会包含在http的请求中)
 * 4.服务器端会获取到游览器端携带的cookie
 *
 * 注意：cookie的数据类型只能保存非中文字符串类型。你可以保存多个cookie，一个游览器只能保存300个cookie
 *      一个站点最多可以存入20个cookie，每个cookie的大小限制为4kb
 *
 */
public class CookieDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务端向客户端写Cookie信息
        //    Cookie cookie = new Cookie("name","tom");
        //    cookie.setMaxAge(1*30*24*60*60);
        //    resp.addCookie(cookie);
        //获取到客户端的cookie
        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();
        if(cookies!=null){
            for (Cookie c:cookies) {
                String name = c.getName();
                String value = c.getValue();
                out.println(name+"------"+value);
            }
        }else {
            out.println("没有接收到cookie数据");
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}